﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    /// <summary>
    /// Список ролей
    /// </summary>
    public class RolesCollection : AbstractCollection
    {
        protected static List<Roles> _list;

        /// <summary>
        /// Список ролей из базы
        /// </summary>
        public List<Roles> RolesList
        {
            get
            {
                return Entities.Roles.ToList();
                if (_list == null)
                    _list = DB.Entities.Roles.ToList();
                return _list;
            }
        }

        /// <summary>
        /// Список активных ролей
        /// </summary>
        public List<Roles> ActiveRolesList
        {
            get
            {
                return Entities.Roles.Where(c => c.IsActive).ToList();
                return RolesList.Where(role => role.IsActive).ToList();
            }
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            _list = null;
        }

        /// <summary>
        /// Ищет роли, которым принадлежит данный пользователь
        /// </summary>
        /// <param name="userLoginName">имя пользователя</param>
        /// <returns>список ролей</returns>
        public List<Roles> GetRolesByUserLoginname(string userLoginName)
        {
            var col = new UsersCollection();
            var result = new List<Roles>();
            Users user = col.GetUserByLogin(userLoginName);
            foreach (UsersInRoles item in user.UsersInRoles)
            {
                result.Add(item.Roles);
            }

            return result;
        }

        /// <summary>
        /// Обновление роли
        /// </summary>
        /// <param name="item">Роль</param>
        /// <param name="userLogin">Пользователь</param>
        /// <returns>Результат операции</returns>
        public new bool Update(object item, string userLogin)
        {
            var role = item as Roles;

            if (role != null)
            {
                var role4Update = (Roles) GetItemById(role.IdRole);

                if (role4Update != null)
                {
                    if (role.IdProfineRegion != null)
                        if (role.IdProfineRegion > 0) role4Update.IdProfineRegion = role.IdProfineRegion;
                    if (role.IdRolesType != null) if (role.IdRolesType > 0) role4Update.IdRolesType = role.IdRolesType;
                    if (!string.IsNullOrEmpty(role.RoleNameEn)) role4Update.RoleNameEn = role.RoleNameEn;
                    if (!string.IsNullOrEmpty(role.RoleNameRu)) role4Update.RoleNameRu = role.RoleNameRu;
                    return base.Update(item, userLogin);
                }
            }

            return false;
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(RolesList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (Roles);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            return _list;
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.Roles.Find(itemId);
        }

        #endregion
    }
}